package objetos.aeronaves.enemigos;

import java.util.Random;
import juego.Escenario;
import movimiento.Posicion;
import movimiento.patrones.ZigZag;
import objetos.Energia;
import objetos.aeronaves.Enemigo;
import objetos.armas.*;
import objetos.powerUps.*;
import org.jdom.*;
import vistas.FactoryVistas;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.vista.Imagen;
import auxiliares.Vector;

/*
 * Clase que modela el bombardero enemigo
 */
public class Bomber extends Enemigo {

	public Bomber() {
		super();
		this.setTamanio(26);
		this.setEnergia(new Energia(100));
		this.setVelocidad(new Vector(3, 1));
		this.setPatron(new ZigZag());
		this.setPuntajeOtorgado(30);
		this.setVelocidadHuida(new Vector(0, -1));
		this.getArsenal().activarLaser();
		this.getArsenal().cargarTorpedos(3);
		this.getArsenal().cargarRastreadores(1);
	}

	public Bomber(Posicion posicion) {
		this();
		this.setPosicion(posicion);
	}

	public Bomber(int x, int y) {
		this(new Posicion(x, y));
	}

	@Override
	public void destruir() {
		super.destruir();
		/* Al ser destruido puede dejar un power-up en su lugar */
		Random rdm = new Random();
		int num = rdm.nextInt(9);
		switch (num) {
		case 0:
			Escenario.getInstance().agregarObjeto(
					new DeTorpedera(this.getPosicion(), new Torpedera(null, 5,
							5, 5)));
		case 1:
			Escenario.getInstance()
					.agregarObjeto(
							new DeLaser(this.getPosicion(), new LaserCannon(
									null, true)));
		}
	}

	@Override
	public Imagen darVista(ControladorJuego controlador) {
		return FactoryVistas.crearVista(this, controlador);
	}

	/* Persistencia */
	public Bomber(Element nodo) {
		this(Integer.parseInt(nodo.getAttributeValue("posicionX")), Integer
				.parseInt(nodo.getAttributeValue("posicionY")));
		this.setArsenal(new CuartoArmas(nodo.getChild("cuartoArmas")));
		this.getArsenal().setBase(this);
	}

	/* NodoXML a partir de instancia */
	@Override
	public Element obtenerNodo() {
		Element nodo = new Element("bomber");
		nodo.setAttribute(new Attribute("posicionX", Integer.toString(this
				.getPosicion().getEnX())));
		nodo.setAttribute(new Attribute("posicionY", Integer.toString(this
				.getPosicion().getEnY())));
		nodo.addContent(this.getArsenal().obtenerNodo());
		return nodo;
	}

}
